﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using GestionePolveriLib.BL.Metadata;

namespace GestionePolveriLib.BL
{
    [Serializable]
    [MetadataType(typeof(ScortaMinimaMetadata))]
    public class Polvere
    {
        private double? m_quantitaNCBlocked = null;

        [Browsable(false)]
        public int ID { get; set; }
        [DisplayName("Codice Polvere")]
        public string CodicePolvere { get; set; }
        public string Descrizione { get; set; }
        public string Note { get; set; }
        [Browsable(false)]
        public Fornitore Fornitore { get; set; }
        public double ScortaMinima { get; set; }

        [DisplayName("Fornitore")]
        public string FornitoreDescrizione { get { return (Fornitore == null ? string.Empty : Fornitore.Descrizione); } }

        [DisplayName("Colori Abbinati")]
        public string ColoriAbbinati { get; set; }

        [DisplayName("Applicazione")]
        public string Applicazione { get; set; }

        [DisplayName("Codice XXXX")]
        public bool IsCodiceCustom { get; set; }

        [DisplayName("Famiglia")]
        public string FamiglieColori { get; set; }

        [Browsable(true)]
        public double? Giacenza { get; set; }

        //[Browsable(true)]
        //public DateTime? DataControllo { get; set; }

        [Browsable(true)]
        public double? QuantitaImpegnata { get; set; }
        [Browsable(true)]
        public double? QuantitaDisponibile 
        { 
            get
            {
                return this.Giacenza - (this.QuantitaImpegnata.HasValue ? this.QuantitaImpegnata.Value : 0) - (this.QuantitaNCBlocked.HasValue ? this.QuantitaNCBlocked.Value : 0);
            } 
        }

        [Browsable(true)]
        public double? QuantitaNC { get; set; }

        [Browsable(true)]
        public double? QuantitaNCBlocked 
        {
            get { return (m_quantitaNCBlocked == 0 ? null : m_quantitaNCBlocked); }
            set { m_quantitaNCBlocked = value; } 
        }

        [Browsable(true)]
        public TipologiaScortaMinima TipologiaSM { get; set; }

        public Polvere()
        {

        }
    }
}
